home *** CD-ROM | disk | FTP | other *** search
- /*
- * 追補版 SX-Window programming のサンプルCSAMPLE.Cと
- * ほぼ等価な働きをするはずだったMSXLIBのサンプル
- *
- * 1993 7/23(Fri)
- * 1996 1/28(Sun)
- */
- #include <method/Dialog_i.h>
- #include <method/Event_i.h>
- #include <method/Graph_i.h>
- #include <method/Memory_i.h>
- #include <method/Task_i.h>
- #include <method/Text_i.h>
- #include <method/Window_i.h>
- #include <method/femac.h>
- #include <method/methodSx.h>
- #include <method/Dos_i.h>
- #include <method\sxutil.h>
- #include "common2.h"
-
-
- #define WINOPT (WC_SCROLL | WC_GBOX) /* ウィンドウオプション */
- #define MAIN_GSIZE {308, 256+22, 750, 500} /* サイズボックスで操作出来るウインドウの最小最大大きさ */
- #define MAIN_WIN_DX 308 /* メインウインドウの横幅 */
- #define MAIN_WIN_DY 256+22 /* メインウインドウの縦幅 */
- #define LINEMAX 128 /* 1行に入る文字数 */
- /* #define CACHESIZE 4096 */ /* キャッシュサイズ */
- #define TEXTSIZE 10 /* キャッシュサイズ */
-
- point_t fontSize = Point_t(16,16);
- char text[] = "NULL"; /* テキスト格納用 */
- int command = 0; /* 現在処理中のコマンド */
- char *bunkenFile;
-
- /* ken グローバル変数 */
- char *tex; /* jis2shift()で使うワーク */
- int cdfile = 0;
- /* char out[ 0x800*10 ]; */
- char e_key = 0;
- unsigned int nextpos;
-
- unsigned int indexpage , indexoff; /* kenji suzuki */
- int limit;
-
- /* linkInfo *link; */
-
- char wintitle[ 40 ]; /* ウィンドウのタイトル */
-
-
- /*
- * 関数宣言
- */
- void exit(int);
-
- int MainDraw(void);
- /* int EscCancel(method_t *tm);
- int EscCtrl(method_t *tm);
- int DrawDialog(void);
- int Dropped(void);
- */
- int MenuProc(void);
- /*
- int LCCBtnProc(void);
- int FnameProc(void);
- */
- int FixAll(void);
- /* int ExecCommand(void);
- */
- int MultiMouse(void);
- int DispPrev( void );
- int DispNext( void );
- int DispUp( void );
- int DispImage( unsigned int );
- int DispImageEP( unsigned int );
- int DispMenu( void );
- int DispLink( unsigned int );
- int DoSound( void );
- int Set_text( void );
- void AdjText(void);
- void AdjWinScrBar(void);
- void MainLoop(void);
- /* void ChangeFontSize(point_t siz);
- */
- int Init(void);
- void main(int , char *[]);
-
-
- /*
- * 描画関数リスト
- */
- proc_list_t mainDraw = {MainDraw, NULL /* リスト終了 */};
-
- /*
- * ウインドウ定義
- */
- window_t mainWin = {
- &mainDraw, /* @描画ルーチンへ */
- (window *) NULL, /* @ウインドウ定義レコードへ */
- (window *) -1, /* @通常-1 重ねるウインドウへ */
- {0, 0, MAIN_WIN_DX, MAIN_WIN_DY},
- /* @ウインドウの大きさを示すレクタングル */
- "\@本文", /* @ウインドウタイトルへ LASCII */
- 0, /* @可視フラグ */
- (0x20 << 4)+ WINOPT, /* @rsc WDEFのID*16 + オプション */
- 0b1101, /* @付属品フラグ
- bit0:クローズボタン, bit1:ウインドウ用水平スクロールバー,
- bit2:ウインドウ用垂直スクロールバー, bit3:サイズボタン */
- Point_t(6*LINEMAX, 0)
- /* @スクロールバーの最大値(x,y)->(H,V) */
- };
-
- /*
- * 各種Methodの内容定義
- */
- m_text_t textTM = { /* テキスト編集用 */
- text, /* @文字列格納領域へ ※格納領域もちゃんとしてあること */
- TEXTSIZE, /* @最大文字数 */
- {0, 22, 300, 500+22},
- /* @編集領域 view & rect */
- 1, /* @文字の種類 kind */
- 0, /* @文字の属性 face */
- 0, /* @文字の書き方 mode */
- Point_t(0, 0), /* @文字の大きさ size */
- G_BLACK, /* @文字色 fore */
- G_LGRAY, /* @背景色 back */
- 0b00100, /* @フラグ
- bit0:リターンで終了するか, bit1:ファイル名の入力か
- bit2:枠を描かないか, bit3:アイコンドロップを入力としないか
- bit4:Sleepで斜線を引かない, bit5:幅広枠にする
- bit6:入力があったら次のテキストMethodへ移るか
- bit7:センタリング, bit8:右寄せ */
- NULL, /* @KeyDownイベントのフィルター */
- 1, /* @テキストアクティブフラグ */
- };
-
- m_control_t cprev = {{60 , 0, 60 + 6*6 + X_STDBTN, 0 + DY_STDBTN}, 0, 0, 1, 0, "\@▲"},
- cnext = {{108, 0, 108 + 6*6 + X_STDBTN, 0 + DY_STDBTN}, 0, 0, 1, 0, "\@▼"},
- cup = {{156, 0, 156 + 6*6 + X_STDBTN, 0 + DY_STDBTN}, 0, 0, 1, 0, "\@<"};
-
- char menuFont[] =
- "^1ROM 12dot,"
- "^2ROM 16dot,"
- "^3ROM 24dot";
- m_menu_t
- fontMM = {Rect(4, 1, 38, 19), 0b100, (long) "\@フォント選択", (long) menuFont, NULL, 0b100};
-
- m_mouse_t mmTM = { {0,21,1024,1024} , 0 }; /* 左ボタンアップ */
-
- /*
- * Method定義
- */
- int LCCBtnProc();
- int FnameProc();
- int MenuProc();
- method_t
- mTextTM = {NULL, m_STRING, &textTM, FixAll},
- mFontMM = {NULL, m_MENU, &fontMM, MenuProc},
- mNext = {NULL, m_STDBTN, &cnext, DispNext},
- mPrev = {NULL, m_STDBTN, &cprev, DispPrev},
- mUp = {NULL, m_STDBTN, &cup, DispUp};
- /* 次のMethodへ, 種類, 実際の定義へ, 処理関数 */
- method_t
- mMmTM = {NULL, m_MSLUP, &mmTM , MultiMouse};
-
- /*
- * Method Group定義
- */
- method_t *textMG[] = {&mTextTM , &mFontMM , &mNext , &mPrev , &mUp , &mMmTM , NULL};
- /* method_t *textMG[] = {&mFontMM , &mTextTM , &mNext , &mPrev , &mImageBtn , &mLinkBtn , &mSoundBtn , NULL}; */
-
- /*
- * メインウインドウの描画関数
- */
- int MainDraw()
- {
- extern rectImg kankyouRImg;
- rect winside;
- point_t wsize;
- GetWinInside(&mainWin, &winside);
- wsize = ULSizeOfRect(&winside);
- ULD3LineH(Point_t(0, 20), Point_t(Pt_x(wsize), 0), 1);
- GMPlotImg((unsigned short *) &kankyouRImg.data, &kankyouRImg.bounds, 0x300);
- return 0;
- }
-
-
- int showhide( void )
- {
- if( nextflg == 1 )
- {
- AwakeMethod( &mNext , 1 );
- } else {
- SleepMethod( &mNext , 1 );
- };
-
- if( rirekimax > 1 )
- {
- AwakeMethod( &mPrev , 1 );
- } else {
- SleepMethod( &mPrev , 1 );
- };
-
- if( menukaisoumax > 1 )
- {
- AwakeMethod( &mUp , 1 );
- } else {
- SleepMethod( &mUp , 1 );
- };
-
- return( 0 );
- };
-
- /* tsugi */
- int DispNext( void )
- {
- get_next( );
- Set_text( );
- showhide( );
-
- return( 1 );
- }
-
- /* mae */
- int DispPrev( void )
- {
- get_foward( );
- Set_text( );
- showhide( );
-
- return( 1 );
- }
-
- /* 1つ上の階層 */
- int DispUp( void )
- {
- get_up( );
- Set_text( );
- showhide( );
-
- return( 1 );
- }
-
- int DispMenu( )
- {
- Set_text( );
- showhide( );
-
- return( 1 );
- };
-
- int DispImage( unsigned int filepos )
- {
- static char fockname[] = "eb_graph.x";
- /* 012345678901234567890123456 */
- char *comline = NULL;
- char *work = NULL;
- char *workptr;
- int stat;
-
- comline = (char *)_ULMALLOC( 280 );
- if( comline == NULL )
- {
- return( 1 );
- }
-
- work = (char *)_ULMALLOC( 100 );
- if( work == NULL )
- {
- return( 1 );
- }
-
- /* コマンドラインの作成 */
- strcpy( comline , " -t" );
- workptr = work;
- ULUsingX( workptr, filepos , 16 );
- while( *workptr == ' ' && *workptr != 0 ) /* 頭のスペースをとばす */
- workptr++;
- strcat( comline, workptr );
-
- /* ファイル名 */
- strcat( comline , " -f" );
- strcat( comline , bunkenFile );
-
- /* ウィンドウタイトル */
- strncpy( work , tex , 14 );
- work[ 14 ] = '\0';
- strcat( comline , " -n" );
- strcat( comline , work );
-
- *comline = strlen( comline+1 );
- stat = TSFockB( 0, fockname , comline , 0,fockname );
-
- _ULFREE( work );
- _ULFREE( comline );
-
- return( 1 );
- }
-
- int DispImageEP( unsigned int filepos )
- {
- static char fockname[] = "eb_graph.x";
- /* 012345678901234567890123456 */
- char *comline = NULL;
- char *work = NULL;
- char *workptr;
- int stat;
-
- comline = (char *)_ULMALLOC( 280 );
- if( comline == NULL )
- {
- return( 1 );
- }
-
- work = (char *)_ULMALLOC( 100 );
- if( work == NULL )
- {
- return( 1 );
- }
-
- /* コマンドラインの作成 */
- strcpy( comline , " -t" );
- workptr = work;
- ULUsingX( workptr, filepos , 16 );
- while( *workptr == ' ' && *workptr != 0 ) /* 頭のスペースをとばす */
- workptr++;
- strcat( comline, workptr );
-
- /* ファイル名 */
- strcat( comline , " -e -f" );
- strcat( comline , bunkenFile );
-
- /* ウィンドウタイトル */
- strncpy( work , tex , 14 );
- work[ 14 ] = '\0';
- strcat( comline , " -n" );
- strcat( comline , work );
-
- strcat( comline , " -x" );
- workptr = work;
- ULUsingX( workptr, gra_x , 8 );
- while( *workptr == ' ' && *workptr != 0 ) /* 頭のスペースをとばす */
- workptr++;
- strcat( comline, workptr );
-
- strcat( comline , " -y" );
- workptr = work;
- ULUsingX( workptr, gra_y , 8 );
- while( *workptr == ' ' && *workptr != 0 ) /* 頭のスペースをとばす */
- workptr++;
- strcat( comline, workptr );
-
- *comline = strlen( comline+1 );
- stat = TSFockB( 0, fockname , comline , 0,fockname );
-
- _ULFREE( work );
- _ULFREE( comline );
-
- return( 1 );
- }
-
- int DoSound()
- {
- return( 1 );
- }
-
- int DispLink( unsigned int filepos )
- {
- static char fockname[] = "eb_hon.x";
- /* 012345678901234567890123456 */
- char *comline = NULL;
- char *work = NULL;
- char *workptr;
- int stat;
- int limit = 0;
-
- comline = (char *)_ULMALLOC( 280 );
- if( comline == NULL )
- {
- return( 1 );
- }
-
- work = (char *)_ULMALLOC( 100 );
- if( work == NULL )
- {
- return( 1 );
- }
-
- /* コマンドラインの作成 */
- strcpy( comline , " -t" );
- workptr = work;
- ULUsingX( workptr, filepos , 16 );
- while( *workptr == ' ' && *workptr != 0 ) /* 頭のスペースをとばす */
- workptr++;
- strcat( comline, workptr );
-
- strcat( comline , " -f" );
- strcat( comline , bunkenFile );
-
- if( e_key == 1 )
- {
- strcat( comline , " -e" );
- };
- /*
- strcat( comline , " -g" );
- workptr = work;
- ULUsingX( workptr, limit , 8 );
- while( *workptr == ' ' && *workptr != 0 ) */ /* 頭のスペースをとばす */
- /* workptr++;
- strcat( comline, workptr );
- */
- *comline = strlen( comline+1 );
- stat = TSFockB( 0, fockname , comline , 0,fockname );
-
- _ULFREE( work );
- _ULFREE( comline );
-
- return( 1 );
- };
-
-
- int MultiMouse()
- {
- tEdit **thdl = textTM.tHdl;
- char work[ 32 ];
- char *pst = textTM.tStr;
- char stat;
-
- stat = GMPtInRect( &textTM.tRect , mmTM.msPt );
- if( stat > 0 )
- {
- if( (*thdl)->selStart == (*thdl)->selEnd )
- {
- if( strncmp( "◎" , pst+(*thdl)->selStart, 2 ) == 0 )
- {
- find_linkdata( (*thdl)->selStart );
- /* カーソル位置がそのままだと、再度ウィンドウがアクティベートされた時、
- 勝手にグラフィックウィンドウ等が開いてしまうので、一応変えておく */
- TMOffsetSel( thdl , ((*thdl)->selStart)+2 ,0 );
-
- /* TMSetSelect( thdl , ((*thdl)->selStart)+2 , ((*thdl)->selEnd)+2 , (*thdl)->selStart+2 ); */
- };
- };
- };
- return 1;
- }
-
- /*
- * メニューの処理
- */
- const point_t fSizeLst[3] = {Point_t(12, 12), Point_t(16, 16), Point_t(24, 24)};
- int MenuProc()
- {
- switch (fontMM.mValue) {
- case 1:
- case 2:
- case 3: /* フォントサイズの直接指定 */
- ChangeFontSize(fSizeLst[fontMM.mValue-1]);
- DrawMethod(&mTextTM);
- break;
- };
- return 1;
- }
-
- /*
- * ウインドウのサイズが変わった時、テキストの見える範囲(view rect)
- * を補正する。するとスクロールバーの最大値も変わる。
- *
- * また、テキストが編集された時、テキストの方のサイズが変わるので
- * 補正しなくてはならない。
- */
- int FixAll()
- {
- tEdit **thdl = textTM.tHdl;
- tOffset dofst;
- int dx, dy, vx, vy, /* dx, dy テキストの大きさ, vx, vy 見える範囲の大きさ */
- x_max = 0, y_max = 0, fontx3, fonty3;
-
- rect dRec={0,22,300,65535};
- ClipOnContents(&mainWin);
- GetWinInside(&mainWin, &dRec); /* ken */
-
- GetWinInside(&mainWin, &textTM.tRect);
- TMGetDestOffset(textTM.tHdl, (long *) &dofst);
- textTM.tRect.top = 22;
-
- dRec.top = 22;
- dRec.bottom = 0x4ffff;
-
- _PushStatusTM(&mTextTM);
- TMHide(thdl);
-
- TMSetRect(thdl , &dRec , &textTM.tRect);
- TMGetDestOffset(textTM.tHdl, &dofst);
-
- /* TMSetView(thdl, &textTM.tRect); */
-
- dx = (*thdl)->dest.right - (*thdl)->dest.left;
- dy = (*thdl)->nLines * (*thdl)->lineHeight; /* テキスト行数×改行幅 */
- /* 何故次の行を入れるとうまくいってしまうのか分からない */
- /* GMSizeRect(&(*thdl)->dest, Pt_t(dx, dy)); */
-
- vx = textTM.tRect.right - textTM.tRect.left;
- vy = textTM.tRect.bottom - textTM.tRect.top;
- fontx3 = Pt_x(fontSize)*3;
- fonty3 = Pt_y(fontSize)*3;
-
- /* スクロールする数を得る */
- /* d? - v?でスクロールすべきドット数が出る。*/
- if (dx > vx)
- x_max = 1 + (dx - vx)/(fontx3); /* スクロール単位は半角6文字分づつ */
- if (dy > vy)
- y_max = 1 + (dy - vy)/(fonty3); /* スクロール単位は3列分づつ */
- /* 1を足しているのは端数を繰り上げさせるため */
-
- MaxSetScrBar(&mainWin, Point_t(x_max, y_max));
- /* スクロールバーがページ操作された時の変化量を代入 */
- /* SetPageValueScroll(mainWin.hHdl, vx / fontx3); */
- SetPageValueScroll(mainWin.vHdl, vy / fonty3);
-
- TMShow(thdl);
- TMUpDate( thdl , &textTM.tRect ); /* ken */
-
- if (y_max <= 0 && dofst.Voffset > 0) {/* スクロール出来ないのにスクロールした状態なら */
- TMSetDestOffset(textTM.tHdl, dofst.Hoffset, 0);
- dofst.Voffset = 0;
- }
-
- /* スクロールバーの値を正す */
- ValueSetScrBar(&mainWin,
- Point_t(dofst.Hoffset/fontx3, dofst.Voffset/fonty3));
-
- _PopStatusTM();
- return 1; /* このMethodの処理をした */
- }
-
- /*
- * スクロールバーの現在値を、0.5秒毎に書き直す。
- */
- int SetCurValScrBar(tsevent *ev)
- {
- static long last_scr_bar = 0;
- tOffset dofst;
- int fontx3, fonty3;
-
- if (last_scr_bar + 50 > ev->when)
- return 0;
- last_scr_bar = ev->when;
-
- TMGetDestOffset(textTM.tHdl, (long *) &dofst);
-
- fontx3 = Pt_x(fontSize)*3;
- fonty3 = Pt_y(fontSize)*3;
-
- /* スクロールバーの値を正す */
- ValueSetScrBar(&mainWin,
- Point_t(dofst.Hoffset/fontx3, dofst.Voffset/fonty3));
-
- return 0;
- }
-
- void AdjText() /* スクロールバーの値が変更した時にテキスト位置を調節 */
- {
- point_t val = ValueGetScrBar(&mainWin);
- _PushStatusTM(&mTextTM);
- TMSetDestOffset(textTM.tHdl,
- Pt_x(val)*(Pt_x(fontSize)*3), Pt_y(val)*(Pt_y(fontSize)*3));
- _PopStatusTM();
- }
-
- /*
- * メインループ
- */
- void MainLoop()
- {
- order_t order;
- while (true) {
- order.ev = MayIHelpYou();
- switch (order.ev) {
- case EV_CLOSEALL: /* 終了指令 */
- case EV_CLOSEWIN: /* ウインドウクローズ指令 */
- return;
- case EV_WINGROW:
- case EV_WINZMIN:
- case EV_WINZMOUT:
- FixAll(); /* テキストの大きさやスクロールバーを補正 */
- break;
- case EV_SCROLLH:
- case EV_SCROLLV:
- AdjText(); /* スクロールバーの移動にテキストを追従させる */
- break; /* 但し疑似ダイアログの入力でない時のみにしたい.. */
- }
- }
- }
-
- void ChangeFontSize(point_t siz)
- {
- int kind = -2, mkind = 0b100000;
- tEdit **thdl = textTM.tHdl;
- if (fontSize == siz) /* サイズ変更は無し */
- return;
-
- EMEnCross(0);
- /* フォントサイズを変更 */
- textTM.tSize = fontSize = siz;
- (*thdl)->lineHeight = Pt_y(siz);
- (*thdl)->tabSize = Pt_x(siz)*8; /* タブは8文字分 */
-
- /* 種類変更 */
- switch (Pt_x_y(siz)) {
- case Pt_x_y(Point_t(12,12)):
- kind = 0; /* ROM12にする */
- mkind = 0b10;
- break;
- case Pt_x_y(Point_t(16,16)):
- kind = 1; /* ROM16 */
- mkind = 0b100;
- break;
- case Pt_x_y(Point_t(24,24)):
- kind = 2; /* ROM24 */
- mkind = 0b1000;
- break;
- }
- textTM.tKind = kind < 0 ? -kind:kind;
- /* メニューに記録 */
- fontMM.mCheck = mkind;
- /* 表示などの座標を計算し直す */
- _PushStatusTM(&mTextTM);
- TMCalSelPoint(thdl);
- TMCalText(thdl);
- _PopStatusTM();
- FixAll();
- AdjText();
- EMDeCross();
- }
-
- job_t scrBarJob = {
- NULL, /* 次のJobへ.これは気にしなくていい */
- SetCurValScrBar, /* int (*Proc)(tsevent *) */
- NULL, /* int (*Constructor)(struct stieve_jobs *); */
- NULL, /* int (*Destructor)(struct stieve_jobs *); */
- NULL, /* int (*Sleep)(struct stieve_jobs *); */
- NULL, /* int (*Awake)(struct stieve_jobs *); */
- 0, /* sleep */
- };
-
- int Set_text( )
- {
- ActivateTMethod( NULL , NULL );
- UnchainAMethod( &mTextTM );
-
- textTM.tStr = tex;
- textTM.tMax = strlen( tex );
-
- ChainAMethod( NULL , &mainWin , &mTextTM ); /* 先頭に登録 */
-
- (*textTM.tHdl)->drawMode = 0b010000; /* 改行コードとEOFを表示 */
- (*textTM.tHdl)->locateH = (*textTM.tHdl)->locateV = 0; /* カーソルを0位置に */
- ValueSetScrBar(&mainWin, 0); /* テキストの一番左上部分を見るように */
- (*textTM.tHdl)->lineHeight = 16;
- (*textTM.tHdl)->tabSize = 16*8; /* タブは8文字分 */
-
- ActivateTMethod(&mTextTM, &mainWin);
-
- /* AdjText(); */
-
- TMCalSelPoint(textTM.tHdl);
- TMCalText(textTM.tHdl);
- TMOffsetSel( textTM.tHdl , 2 ,0 );
-
- FixAll(); /* テキストの大きさやスクロールバーを補正 */
-
- return( 0 );
- }
-
-
- /*
- * 初期化ルーチン
- */
- int Init()
- {
- rect trect = MAIN_GSIZE;
- rect drect = textTM.tRect;
- rect trect2 = textTM.tRect;
-
-
- if (ChainMethodIn(&mainWin, textMG) < 0)
- return -1; /* Method登録 */
- (*textTM.tHdl)->drawMode = 0b010000; /* 改行コードとEOFを表示 */
- SetWinGrowSize(&mainWin, &trect); /* ウインドウの最小最大サイズ設定 */
-
- if( tex != NULL )
- {
- (*textTM.tHdl)->locateH = (*textTM.tHdl)->locateV = 0; /* カーソルを0位置に */
- ValueSetScrBar(&mainWin, 0); /* テキストの一番左上部分を見るように */
- (*textTM.tHdl)->lineHeight = 16;
- (*textTM.tHdl)->tabSize = 16*8; /* タブは8文字分 */
-
- TMOffsetSel( textTM.tHdl , 2 ,0 );
-
- /* AdjText(); */
- _PushStatusTM(&mTextTM);
- TMCalSelPoint(textTM.tHdl);
- TMCalText(textTM.tHdl);
- _PopStatusTM();
- };
-
- FixAll(); /* テキストの大きさやスクロールバーを補正 */
-
- ChainJob(&scrBarJob); /* スクロールバー書き換え用 */
- return 0;
- }
-
- /*
- * メインルーチン
- */
- void main(int ac, char *av[])
- {
- int i;
- char *ptr;
- unsigned int seekptr = 0;
- int stat;
- int offset;
- int linkflg;
- int leng;
-
- tex = NULL;
- /* link = NULL; */
-
- if( ac < 2 )
- {
- return;
- };
-
- tex = _ULMALLOC( 0x800*10 ); /* とりあえず適当なサイズで確保 */
- if( tex == NULL )
- {
- ULError( "メモリが確保できません" );
- return;
- }
-
- /* コマンドラインオプションの読み取り */
- for (i = 1; i < ac; i++) {
- ptr = av[i];
- switch (*ptr) {
- case '/':
- case '-':
- ptr++;
- if ('t' == *ptr )
- {
- ptr++;
- seekptr = ULSTOX( ptr );
- } else if ('f' == *ptr )
- {
- ptr++;
- cdfile = TSOpen( ptr , 0 );
- bunkenFile = ptr;
- if( cdfile < 0 )
- {
- /* ULError_str( "Error ファイルがオープンできません path=\n" , ptr );
- */ return;
- };
- } else if ('e' == *ptr )
- {
- ptr++;
- e_key = 1;
- } else if ('g' == *ptr )
- {
- ptr++;
- };
- break;
- }
- }
- set_gaiji( 1 );
-
- init_linktbl( );
- init_rirekitbl( );
- init_kaisoutbl( );
- push_menukaisou( seekptr );
-
- /* ULError_int( seekptr );
- */ DOSSEEK( cdfile , seekptr , SEEK_SET );
- offset = jis2shift( tex , 0x800*4 , 0 , &nextflg );
- textTM.tStr = tex;
- textTM.tMax = strlen( tex );
-
- /* ULError_int( offset+seekptr );
- */ if (OpenWindow(&mainWin, -1)) {
- ULError( "ウインドウさえ開きません" );
- TSClose( cdfile );
- _ULFREE(tex); /* kenji */
- return;
- }
-
- linkflg = 1;
- nextpos = seekptr+offset;
- if( nextflg == 1 ) /* メニュー項目の場合は履歴に残さない(nextを禁止する) */
- {
- /* printf( "PUSH RIREKI\n" ); */
- push_rireki( seekptr );
- };
-
- /* ウィンドウタイトルの作成 */
- wintitle[ 1 ] = '\0';
- strcpy( wintitle+1 , "本文 [" );
- strncpy( wintitle+7 , tex , 16 );
- wintitle[ 23 ] = '\0';
- strcat( wintitle+1 , "]" );
- wintitle[ 0 ] = strlen( wintitle+1 );
- WMTitleSet( mainWin.wptr , wintitle );
-
- if (Init() >= 0)
- {
- showhide( );
- MainLoop();
- UnchainMethod();
- UnchainJob();
- } else {
- ULError( "Methodが登録できません" );
- };
-
- CloseWindow(&mainWin);
- if( tex != NULL )
- {
- _ULFREE(tex); /* kenji */
- };
- if( cdfile != 0 )
- {
- TSClose( cdfile );
- };
-
- return;
- }